from django.contrib.auth import authenticate
from rest_framework import serializers

# 目的定义一个序列化器对username 和password进行校验
# 这里由于不设及模型类所以继承serializers.Serializer
from rest_framework_jwt.utils import jwt_payload_handler, jwt_encode_handler


class LoginSerializer(serializers.Serializer):

    username = serializers.CharField(required=True)
    password = serializers.CharField(required=True)

    # 接下来要使用登陆验证后端来校验用户名和密码，此时就需要自定义校验---采用最终的校验
    def validate(self, attrs):
        # 由于传入的是用户名和密码的字典格式，所以可以直接拆包
        user = authenticate(**attrs)

        if user is None:
            raise serializers.ValidationError("用户名或者密码错误！！！")

        # 如果校验成功，那么就要给顾客办法令牌
        # 传入用户对象，得到荷载对象
        payload = jwt_payload_handler(user)
        # 传入荷载对象，得到令牌对象
        tocken = jwt_encode_handler(payload)

        return {
            'user': user,
            "tocken": tocken
        }

